package br.eng.eliseu.gwt.gestaoWeb.server.atualizacao;

import java.io.File;
import java.io.FilenameFilter;

public class AtualizaBancoDadosCommand implements Runnable {
//	SituacaoAtualizacao situacao;
//	private boolean atualizacaoCompleta=false;
//
//	//TODO COPIADO DE SonnerLogProvider
//	Jdk14Logger log = new Jdk14Logger("br.com.sonner");


	public void run() {
//		situacao = SituacaoAtualizacao.getInstance();
//		atualizaDB();
//		situacao.setEtapaAtual(EtapaAtualizacao.ATUALIZANDO_TP);
		atualizaTabelaPadrao();
//		situacao.setEtapaAtual(EtapaAtualizacao.AGUARDANDO_PTF);
//		atualizacaoCompleta=true;
	}

	private UpgradeTabelasPadraoCommand upgradeTPCmd;

	public void atualizaTabelaPadrao() {
		try {
			String savePath = null;
			savePath = System.getProperty("user.dir")+System.getProperty("file.separator")+"tabelasPadrao"+System.getProperty("file.separator");

			File f = new File(savePath);
			File[] listFiles = f.listFiles(new FilenameFilter() {
				public boolean accept(File dir, String name) {
					if (name.toUpperCase().indexOf("TP.XML") >= 0) {
						return true;
					}
					return false;
				}
			});

			for (File file : listFiles) {
//				String fileName = file.getName().toUpperCase();
				upgradeTPCmd = new UpgradeTabelasPadraoCommand();
				upgradeTPCmd.setPath(savePath);
				upgradeTPCmd.setArquivoConfigXML(file.getName());
				upgradeTPCmd.call();
			}
//			situacao.setStatusTabelaPadrao(StatusAtualizacaoEnum.EXECUTADO);
		} catch (Exception e) {
			System.out.print(e.toString());
//			log.warn(e.getMessage(), e);
//			situacao.falha("Falha atualizando tabelas padrão");
		}
	}

/*
	public void atualizaDB() {
		try {
			final List<String> sistemasDependentes = situacao.getSistemasDependentes();

			String savePath = null;
			if(LiveUpdateUtil.isDesenvolvimento()){
				savePath = EnviromentUtil.getGrpHome();
			}else{
				savePath = GerenciadorLiveUpdate.getDiretorioTemporario();
			}
			File f = new File(savePath);
			File[] listFiles = f.listFiles(new FilenameFilter() {
				@Override
				public boolean accept(File dir, String name) {
					if (name.toUpperCase().indexOf(".BIN") >= 0) {
						String sistema = name.substring(0, name.length() - 4);
						if (sistemasDependentes.contains(sistema)) {
							return true;
						}
					}
					return false;
				}
			});

			List<ErroAtualizacao> errosAtualizacao = new ArrayList<ErroAtualizacao>();
			String fileName;
			situacao.setStatusAtualizacaoDB(StatusAtualizacaoEnum.EXECUTANDO);

			SistemaCommand sistemaCmd = new SistemaCommand();
			sistemaCmd.setCaminhoBase(savePath);

			List<Sistema> sistemas = sistemaCmd.call();
			// Aparentemente processa SON e SST primeiro.
			for (File file : listFiles) {
				fileName = file.getName().toUpperCase();
				if (fileName.equals("SON.BIN") || fileName.equals("SST.BIN")) {
					log.debug("Atualizando banco de dados de: " + fileName);
					processaAtualizacaoDBSistema(savePath, errosAtualizacao, file.getName(), sistemas, file);
				}
			}
			for (File file : listFiles) {
				fileName = file.getName().toUpperCase();
				if (!fileName.equals("SON.BIN") && !fileName.equals("SST.BIN")) {
					log.debug("Atualizando banco de dados de: " + fileName);
					processaAtualizacaoDBSistema(savePath, errosAtualizacao, file.getName(), sistemas, file);
				}
			}
			situacao.setStatusAtualizacaoDB(StatusAtualizacaoEnum.EXECUTADO);
		} catch (Exception e) {
			log.warn(e.getMessage(), e);
			situacao.falha("Falha atualizando banco de dados");
		}
	}

	private void processaAtualizacaoDBSistema(String savePath,
			List<ErroAtualizacao> errosAtualizacao, String fileName,
			List<Sistema> sistemas, File file) throws Exception {
		UpgradeDatabaseCommand upgradeCmd;
		String mnemonico;
		SituacaoAtualizacaoSistemaTO situacaoSistema = null;
		mnemonico = file.getName().substring(0, file.getName().length() - 4);
		if (mnemonico.toUpperCase().equals("SON")) {
			situacaoSistema = new SituacaoAtualizacaoSistemaTO();
			situacaoSistema.setNomeSistema("Tabelas Básicas do Sistema");
			situacaoSistema.setStatus(StatusAtualizacaoEnum.EXECUTANDO);
			situacao.addSituacaoSistema(situacaoSistema);
		} else if (mnemonico.toUpperCase().equals("SST")) {
			situacaoSistema = new SituacaoAtualizacaoSistemaTO();
			situacaoSistema.setNomeSistema("Tabelas de Segurança");
			situacaoSistema.setStatus(StatusAtualizacaoEnum.EXECUTANDO);
			situacao.addSituacaoSistema(situacaoSistema);
		} else if (mnemonico.toUpperCase().equals("CAD")) {
			situacaoSistema = new SituacaoAtualizacaoSistemaTO();
			situacaoSistema.setNomeSistema("Tabelas do Núcleo de Integração");
			situacaoSistema.setStatus(StatusAtualizacaoEnum.EXECUTANDO);
			situacao.addSituacaoSistema(situacaoSistema);
		} else {
			for (Sistema sistema : sistemas) {
				if (sistema.getMnemonico().equals(mnemonico)) {
					situacaoSistema = new SituacaoAtualizacaoSistemaTO();
					situacaoSistema.setNomeSistema(sistema.getNome());
					situacaoSistema.setStatus(StatusAtualizacaoEnum.EXECUTANDO);
					situacao.addSituacaoSistema(situacaoSistema);
					break;
				}
			}
		}
		upgradeCmd = new UpgradeDatabaseCommand();
		upgradeCmd.setArquivo(file);
		upgradeCmd.setMnemonico(mnemonico);
		List<ErroAtualizacao> erros = upgradeCmd.call();
		situacao.addErroAtualizacaoDB(erros);
		situacaoSistema.setStatus(StatusAtualizacaoEnum.EXECUTADO);
	}

	public boolean isAtualizacaoCompleta() {
		return atualizacaoCompleta;
	}
*/
}